查看原文
其他

修改门禁和电梯卡实例之ACR122U的控制指令和参数

letum 看雪学院 2021-03-08

本文为看雪论坛优秀文章

看雪论坛作者ID:letum



社区的门禁兼电梯卡50元一张,我们一家3口人就150元,过阵子家里老爷子来我这里的话再给他搞一张就得花200元了,太贵了吧!想起来柜子里有一个吃灰很久的ACR122U读卡器,遂祭出来分析了一下电梯卡。



第一阶段



还以为是啥高科技CPU卡呢,原来不是,就是一张标准的MIFARE卡。全卡共有16个扇区,每扇区4个块,每块16个字节。每个扇区都有两个密码,全卡共有32个密码。想访问哪个扇区,就必须使用与其对应的密码。

本段内容是道听途说,不知道真假:这种卡加密使用的是Crypto1算法。但是这种加密方式早在2008年就被亨里克和卡尔斯滕哥俩联手攻破了。


这哥俩一个是德国计算机科研人员,一个是美国弗吉尼亚大学计算机专业在读博士。我们可以直接使用他们哥俩在第24届黑客大会上公布的资料来破解M1卡。

找到一个别人写的破解程序,据说原理就是上面那段我道听途说的消息。然而这个破解程序很好用,点了“开始破解”按钮之后几十秒,滴的一声,电梯卡所有扇区的数据全都Dump出来了。这个程序长这个样子:




又找了一个别人的写卡程序,导入刚才破解得到的二进制文件,放上一张从某宝1.2元买来的空白卡扣,写入。


试了试电梯、门禁,多次测试,全都成功,看来这张电梯卡连滚动码都不是,数据终身不变。


复制成功,接下来就想分析分析数据。

晚上静下心来观察观察这些数据,找到了这样一处数据:“13 0A 1F 00 18 00 00 12 08 1B 0A 11”(图片光标所在蓝色行)。


把130A1F0018逐字节转成十进制,就是1910310024,这不就是19年10月31日24点到期嘛(我们小区物业费每年10月到期,小区居民都知道)。


后面的12081B0A11转成十进制表示就是18年08月27日10:17,这就是我去年交物业费时,物业给我更新电梯卡数据的时间嘛。如果直接把130A改成630C有效期不就到了2099年12月了嘛,看起来So easy。

然后想分析一下楼层控制(我的卡只能刷开地下车库、一楼和我所在楼层,电梯里无法按亮其他楼层按钮),结果没分析出来,包含我楼层数字的地方太多了。算了,洗洗睡觉。


第二阶段



后来,不甘心啊,就想知道哪个数据是楼层权限,哪个地方可疑就改哪个地方,然后去电梯测试,暴力尝试,总会找到地方的。

此时发现,我每改一个数据去试验,就得把全卡数据整体写入一次,可我只想写某个块,并不需要全卡重写。有没有可以给出目标块的位置,直接写该块的软件呢?

找了找,都是收费的,最友(sheng)好(qian)的一款是读取目标块免费,写入目标块就得交费注册的,如图,不注册的话,写卡按钮灰色的,如下图:



不想交费,好吧,正好我手里有读卡器的SDK,看看读卡器的命令和参数,自己写一个小程序吧。

SDK里提供的模块已经封装好了各种操作它的函数,直接用就可以了。

实质上就是需要写一个通讯程序,发送一串二进制数据过去,读卡器响应之后返回一串二进制数据回来,并不难。

比如读0x04这个块,发送“FF B0 00 04 10”即可。FFB0是读指令,00是第一个参数,04是第二个参数,10是要读的字节数。

函数返回值9000表示读取成功,6300表示读取错误。(如果读取成功,要读的数据已经在读取缓冲区里了)。

详细参数和返回值如图:



比如想把“00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F”写入0x04这个块,发送“FF D6 00 04 10 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F”即可。

详细参数和返回值如图:



当然,读写某个块的前提是有秘钥哦。

例如秘钥是“FF FF FF FF FF FF”,那么让读卡器载入秘钥需要发送“FF 82 00 00 06 FF FF FF FF FF FF”。

详细参数和返回值如图:



读卡器载入秘钥之后还要和卡内目标块的秘钥进行比对认证,如果秘钥正确才能对目标块进行读写哦。


例如发送“FF 88 00 04 60 00”,FF88是命令,00是参数1,04是参数2,60是秘钥类型,00是秘钥序号。




对我来说,会用这几步就足够了。
1、把秘钥载入到读卡器,同时给秘钥一个序号,比如00号秘钥。
2、把00号秘钥与当前卡目标块的秘钥进行比对认证。
3、认证通过后,对目标块那是想读就读,想写就写。

然后我就写了一个小程序,可以对指定的块进行读写,如下图:



试了试,自己写的程序果然好用,接下来就是去测试哪个块里有电梯楼层限制的数据啦。

有时间我再继续更新。



- End -






看雪ID:letum

https://bbs.pediy.com/user-74186.htm 


*本文由看雪论坛  letum  原创,转载请注明来自看雪社区




推荐文章++++

Android 应用多开对抗实践

Linux pwn从入门到熟练(三)

浅谈Bypass disable_function

内存dump 获得基于Unity3d的游戏相关代码

Android逆向入门练习——滑雪大冒险支付分析




进阶安全圈,不得不读的一本书










“阅读原文”一起来充电吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存